package fr.grobim.hangovers.gestionBudget.actions.tableaux.factures;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import fr.grobim.hangovers.gestionBudget.beans.comptes.Membre;
import fr.grobim.hangovers.gestionBudget.beans.factures.ReglementFacture;
import fr.grobim.hangovers.gestionBudget.utils.DateUtils;

public class ReglementFactureTableau implements Serializable {
	
	private static final long serialVersionUID = 2465643326234636148L;

	private Integer id;
	
	private String libellePayeur;
	
	private String datePayement;
	
	private Double montant;
	
	private String membresConcernes;
	
	public ReglementFactureTableau () {
		
	}
	
	public ReglementFactureTableau(ReglementFacture reglementFacture) {
		this.id = reglementFacture.getId();
		this.libellePayeur = reglementFacture.getPayeur().getSurnom();
		this.datePayement = DateUtils.dateFormatteurParDefaut.format(reglementFacture.getDatePayement());
		this.montant = reglementFacture.getPrix();
		String membresLabel = StringUtils.EMPTY;
		if (CollectionUtils.isNotEmpty(reglementFacture.getMembreConcernes())) {
			List<String> membresSurnom = new ArrayList<String>(reglementFacture.getMembreConcernes().size());
			for (Membre membre : reglementFacture.getMembreConcernes()) {
				membresSurnom.add(membre.getSurnom());
			}
			Collections.sort(membresSurnom);
			Iterator<String> membresIt = membresSurnom.iterator();
			if (membresIt.hasNext()) {
				membresLabel += membresIt.next();
			}
			while (membresIt.hasNext()) {
				membresLabel += ", ";
				membresLabel += membresIt.next();
			}
		}
		this.membresConcernes = membresLabel;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getLibellePayeur() {
		return libellePayeur;
	}

	public void setLibellePayeur(String libellePayeur) {
		this.libellePayeur = libellePayeur;
	}

	public String getDatePayement() {
		return datePayement;
	}

	public void setDatePayement(String datePayement) {
		this.datePayement = datePayement;
	}

	public Double getMontant() {
		return montant;
	}

	public void setMontant(Double montant) {
		this.montant = montant;
	}
	
	public String getMembresConcernes() {
		return membresConcernes;
	}

	public void setMembresConcernes(String membresConcernes) {
		this.membresConcernes = membresConcernes;
	}

	public static List<ReglementFactureTableau> convertirListe(List<ReglementFacture> listeReglements) {
		List<ReglementFactureTableau> listeRetour = new LinkedList<ReglementFactureTableau>();
		for (ReglementFacture reglementFacture : listeReglements) {
			listeRetour.add(new ReglementFactureTableau(reglementFacture));
		}
		return listeRetour;
	}

}
